home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
libs
/
knowhow4
/
khoopic.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-04
|
5KB
|
173 lines
#include "khoopic.h"
#include <conio.h>
void KH_OOPic::terminate()
{
if(kbhit())
{
getch();
if(kbhit())
getch();
serror(23);
}
}
///////////////////
void KH_OOPic::show()
{
Window::show(); // Show window
::setfillstyle(SOLID_FILL, WHITE);
::bar(user_screen());
if(program != NULL) // If program is loaded
{
rect r = user_screen(); // Set clip area
setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
basic(program); // Run program
setviewport(0, 0, getmaxx(), getmaxy(), 1); // Restore clip area
}
}
///////////////////
void KH_OOPic::get_event()
{
char* s1 = "X: ";
char* s2 = "Y: ";
while(1)
{
::get_event(2);
if(e.what == MOUSEEVENT)
{
loc wh = e.where() - user_screen().origin;
itoa((long)(wh.X) * 100 / zoom.X + lt.X, s1 + 2, 10);
itoa((long)(wh.Y) * 100 / zoom.Y + lt.Y, s2 + 2, 10);
struct textsettingstype textinfo;
gettextsettings(&textinfo);
int c = getcolor();
struct fillsettingstype fillinfo;
getfillsettings (&fillinfo);
::setfillstyle(SOLID_FILL, BLUE);
::settextjustify(LEFT_TEXT, TOP_TEXT);
::bar(560, 2, 640, 32);
::setcolor(WHITE);
::settextstyle(0, 0, 1);
::outtextxy(562, 2, s1);
::outtextxy(562, 14, s2);
::settextstyle(textinfo.font, textinfo.direction, textinfo.charsize);
::settextjustify(textinfo.horiz, textinfo.vert);
::setfillstyle(fillinfo.pattern, fillinfo.color);
::setcolor(c);
}
if(e.what == KEYEVENT || (e.what == MOUSEEVENT && e.mouse1()))
break;
}
}
///////////////////
void KH_OOPic::exe(int act)
{
e.what = act ? KEYEVENT : NOEVENT; // act or user input
switch(act)
{
case AC_LEFT: e.key = EVENT_LEFT; break;
case AC_RIGHT: e.key = EVENT_RIGHT; break;
case AC_UP: e.key = EVENT_UP; break;
case AC_DOWN: e.key = EVENT_DN; break;
case AC_PG_UP: e.key = EVENT_PG_UP; break;
case AC_PG_DN: e.key = EVENT_PG_DN; break;
case AC_CTRL_PG_UP: e.key = EVENT_CTRL_PG_UP; break;
case AC_SET: e.key = EVENT_F9; break;
case AC_CANCEL: e.key = (isRet(RET_REMOVE))
? EVENT_ALT_F3 : EVENT_ESC;
break;
case AC_OK: e.key = EVENT_F2; break;
}
mouseHideCursor();
if(!act)
hilite();
int on = 0;
mouseShowCursor();
rect r = user_screen();
while(1)
{
mouseShowCursor();
if(!act && !(e.what == MOUSEEVENT && !on)) // Get user-produced event
get_event(); // or process "act" message
else
on = 1;
mouseHideCursor();
if(e.what == KEYEVENT)
{
switch(e.key)
{
case EVENT_F1: global_i[0] = action_type; return;
case EVENT_RIGHT: lt.X += 8; break;
case EVENT_LEFT: lt.X = lt.X < 8 ? 0 : lt.X - 8; break;
case EVENT_UP: lt.Y = lt.Y < 8 ? 0 : lt.Y - 8; break;
case EVENT_DN: lt.Y += 8; break;
case EVENT_HOME: lt.X = 0; break;
case EVENT_PG_UP:
lt.Y = lt.Y < r.height() ? 0 : r.height(); break;
case EVENT_END: lt.X += r.width(); break;
case EVENT_PG_DN: lt.Y += r.height(); break;
case EVENT_CTRL_PG_UP: lt.Y = 0; break;
case EVENT_F9: break; // run
case EVENT_ESC: global_num = 0;
global_i[0] = AC_NULL; return;
case EVENT_F6:
case EVENT_F10:
case EVENT_TAB:
case EVENT_ALT_F3:
case EVENT_ALT_F4:
case EVENT_ALT_TAB:
unhilite(); global_num = 1;
global_i[0] = 0; return;
case EVENT_F2:
case EVENT_RETURN : unhilite(); global_num = 1;
global_i[0] = action_type; return;
}
if(program != NULL) // If program is loaded
{
::setfillstyle(SOLID_FILL, WHITE);
::bar(user_screen());
setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
basic(program); // Run program
setviewport(0, 0, getmaxx(), getmaxy(), 1); // Restore clip area
}
}
else
{
if(!mouse_in(e.where())) // Mouse pressed outside
{
unhilite();
global_num = 0; global_i[0] = AC_NULL;
return;
}
}
if(act) // leave object and return to the object which calls it
{ // after single processing of "act" command
global_num = 1;
return;
}
}
}
//////////////
/*
void main()
{
if(!init_KNOW_HOW())
return;
setfillstyle(SOLID_FILL, pColorSet->colors.BAK_COLOR);
bar(0, 0, getmaxx(), getmaxy());
KH_OOPic s(rect(10, 0, 60, 24));
s.show();
s.set_program(s.load_program("work.bas"));
s.show();
s.exe();
close_KNOW_HOW();
closegraph();
}
*/